﻿//
#define _CRT_SECURE_NO_WARNINGS
//#include<stdio.h>
//int main()
//{
//	printf("hello world");
//	return 0;
//}

//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	char arr[] = { 'b','i','t'};
//	printf("%d\n", strlen(arr));
//	return 0;
//}
//
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	printf("%d\n",
//		strlen("c:\test\121"));
//	return 0;
//}
//
//#include<stdio.h>
//int main()
//{
//	printf("%d\n", 6/ 4);
//	int score = 5;
//	printf("%*.*f\n",0,2,score/20.0*100);
//	int a = 10;
//	printf("%d\n", a *= 3);
//	printf("%d\n", a += 3);
//	printf("%d\n", a -= 3);
//	printf("%d\n", a %= 3);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int a = 10;
//	a++;
//	printf("%d\n", a);  //a++或++a都表示自加1；a--或--a同理
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int a = 10;
//	int b = a++;//后置++，先使用，后+1
//	printf("%d\n", b);//10
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int a = 10;
//	int b = ++a;//前置++，先+1，后使用
//	printf("%d\n", b);//11
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int a = 10;
//	int b = a--;//后置，先使用，后-1
//	printf("%d\n", a);//9
//	printf("%d\n", b);//10
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int a = 10;
//	int b = --a;//前置，先-1，后使用
//	printf("%d\n", a);//9
//	printf("%d\n", b);//9
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	printf("hello\nworld\n");
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int n = 3;//有三个苹果
//	printf("这里有%d个苹果", n);
//	return 0;
//}
//%s表示占位符，表示占用一个字符串

//#include<stdio.h>
//int main()
//{
//	int a = 7;
//	int b = 2;
//	float c = 2.0f;
//	printf("%d\n", a / b);
//	printf("%f\n", a / c);
//		return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int a, b, c;
//	a = 5;
//	c = ++a;
//	b = ++c,  c++, ++a, a++;
//	b += a++ + c;
//	printf("a=%d b=%d c=%d\n:", a, b, c);
//	return 0;
//
//#include<stdio.h>
//int main()
//{
//	int a = 0;
//	int b = 0;
//	float x = 0.0;
//	float y = 0.0;
//	scanf("%d%d%f%f", &a, &b, &x, &y);//输入四个数字，分别存储。
//	printf("a=%d\n",a);
//	printf("b=%d\n",b);
//	printf("x=%f\n",x);
//	printf("y=%f\n",y);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int x = 0;
//	float y = 0.0;
//	//用户输入“     -13.45e12# 0”
//	scanf("%d", &x);
//	printf("%d\n", x);
//	scanf("%f",&y);
//	printf("%f\n", y);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int a = 0;
//	int b = 0;
//	float f = 0.0;
//	int ret = scanf("%d %d %f", &a, &b, &f);//读取成功的数值
//	printf("a=%d b=%d f=%f\n", a, b, f);//在vs中，连续按3次ctrl+z,scanf函数会读取失败。
//	printf("ret=%d\n", ret);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	//计算两个整数的和
//	//题目会输入多组测试数据，也会产生多种结果
//	//10 20
//	//100 200
//	//3 5
//	int a = 0;
//	int b = 0;
//	//多组输入的场景
//	while (scanf("%d%d", &a, &b) !=EOF)//end of file,结束运行文件
//	{
//		printf("%d\n", a + b);
//	}
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	char ch = 0;
//	scanf("%c", &ch);
//	printf("%c\n", ch);//scanf扫描时不会跳过空格，会将空格师为字符
//	printf("---%c---\n", ch);
//	printf(" %c\n", ch);//%c前加空格，可以强制跳过多个空白字符
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	//从键盘上读取一个字符串
//	char arr[10];//字符数组-可以存放十个字符
//	//scanf("%[10]s"; arr)
//	scanf("%s", arr);//数组名arr本来就是地址，所以这里不需要&
//	//scanf("%[^\n]s",arr);表示scanf会一直往后读取，遇到空格不会停止，直到\n停止
//	printf("%s\n", arr);
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int year = 0;
//	int month = 0;
//	int day = 0;
//	scanf("%d%*c%d%*c%d", &year, &month, &day);//scanf()提供赋值忽略值*，只需把*加在任何占位符的百分号后面，该占位符就不会返回值，解析后将被丢弃。
//	printf("%d-%d-%d\n", year, month, day);
//	return 0;
//}
//
//#include<stdio.h>
//int main()
//{
//	int num = 0;
//	scanf("%d", &num);
//	if (num % 2 == 1)
//		printf("%d 是奇数\n", num);
//	else
//		printf("%d 是偶数\n", num);
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int age = 0;
//	scanf("%d", &age);
//	if (age >= 18)
//	printf("成年\n");
//	else
//	printf("未成年\n");
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int num = 0;
//	scanf("%d", &num);
//	if (num > 0)
//		printf("正数\n");
//	else
//	{
//		if (num < 0)
//			printf("负数\n");
//	}
//	return 0;
//
//}



//#include<stdio.h>
//int main()
//{
//	int num = 0;
//	scanf("%d", &num);
//	if (num > 0)
//		printf("正数\n");
//	else if (num < 0)
//		printf("负数\n");
//	else
//		printf("0\n");
//	return 0;
//
//}


//#include<stdio.h>
//int main()
//{
//	int age = 0;
//	scanf("%d", &age);
//	if (age < 18)
//		printf("少年\n");
//	else if (age <= 44)
//		printf("青年\n");
//	else if ( age <= 59)
//		printf("中老年\n");
//	else if (age <= 89)
//		printf("老年\n");
//	else
//		printf("老寿星\n");//else总与离它最近的if匹配
//	return 0;
//
//}




//}
//#include<stdio.h>
//int main()
//{
//	int i = 0;
//	for (i = 100; i <= 200; i++)
//	{
//		int flag = 1;
//		int j = 0;
//		for (j = 2; j <= i - 1; j++)
//		{
//			if (i % j == 0)
//			{
//				flag = 0;
//				break;
//			}
//		}
//		if (flag == 1)
//		printf("%d\n", i); 
//	}
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//    int a = 0;
//    while (scanf("%d", &a) != EOF)
//    {
//        while (a > 0)
//        {
//            printf("*");
//            a--;
//        }
//        printf("\n");
//    }
//    return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int i = 0;
//	for (i = 0;i < 10;i++)
//		if (i =5)
//		{
//			printf("%d", i);
//
//	}
//	return 0;
//}

//#include<stdio.h>//打印1到100之间所有能被三整除的数字
//int main()
//{
//	for (int i = 3; i <= 100; i += 3)
//	{
//		printf("%d ", i);
//	}
//
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//#include <stdio.h>
//
//    int main() 
//    {
//        int a, b, c;
//
//        // 输入三个整数
//        printf("请输入三个整数，用空格分隔：");
//        scanf("%d %d %d", &a, &b, &c);
//
//        // 使用临时变量进行排序
//        int temp;
//
//        // 第一步：确保a是三个数中最大的
//        if (a < b) 
//        {
//            temp = a;
//            a = b;
//            b = temp;
//        }
//        if (a < c) 
//        {
//            temp = a;
//            a = c;
//            c = temp;
//        }
//
//        // 第二步：确保b是剩下两个数中较大的
//        if (b < c) 
//        {
//            temp = b;
//            b = c;
//            c = temp;
//        }
//
//        // 输出排序结果
//        printf("从大到小排序结果：%d %d %d\n", a, b, c);
//
//        return 0;
//    }
//}

//#include<stdio.h>
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d", &a);
//	(a > 5) ? (b = 3) : (b = -3);//条件操作符（三目操作符）
//	//代码块
//	//exp1？exp2:exp3
//	//表达式1   表达式2   表达式3
//	//真        执行      不执行
//	//假        不执行    执行
//	//另类表达方式
//	//b=（a>5)?(b=3):(b=-3);
//	printf("%d\n", b);
//	return 0;
//}

//使用条件表达式实现找两个数中最大值
//#include<stdio.h>
//int main()
//{
//	int a = 0;
//	int b = 0;
//	int m = 0;
//	scanf("%d %d",&a,&b);
//	/*if (a > b)
//		m = a;
//	else
//		m = b;*/
//	(a > b) ? (m = a) : (m = b);
//	//m=(a>b?a:b); 一般适用于较为简单的场景
//	printf("较大值是%d\n", m);
//	return 0;
//}
//if语句
//逻辑取反运算符（！）可以改变单个运算符的真假
//   a      ！a
//  非0     0
//  0       1

//#include<stdio.h>
//int main()
//{
//	int flag = 0;
//	scanf("%d", &flag);
//	//flag 如果为假，打印
//	//if（flag==0）
//	    //printf("do something\n");
//	//flag 如果假，打印
//	if (!flag)
//		printf("do something\n", flag);
//	return 0;
//}



//逻辑与运算符（&&）表示并且，二者都真则为真（1），否则为假（0）。
//   a      b       a&&b
//  非0    非0        1
//  非0     0         0
//   0     非0        0
//   0      0         0
//#include<stdio.h>
//int main()
//{
//	int month = 0;
//	scanf("%d", &month);
//	if (month >= 3 && month <= 5)
//		printf("春季\n");
//		return 0;
//}

//逻辑或运算符（||），（或者）
//   a      b      a||b
//  非0    非0      1
//  非0     0       1
//   0     非0      1
//   0      0       0

//#include<stdio.h>
//int main()
//{
//	int month = 0;
//	scanf("%d", &month);
//	if (month == 12 || month == 1 || month == 2)
//		printf("冬季");
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int year = 0;
//
//	scanf("%d", &year);
//	if (year % 4 == 0 && year % 100 != 0)
//		printf("%d是闰年\n", year);
//	else if (year % 400 == 0)
//		printf("%d是闰年\n", year);
//
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int year = 0;
//
//	scanf("%d", &year);
//	if((year%4==0 && year%100!=0)||(year%400==0))
//		printf("%d是闰年\n", year);
//
//	return 0;
//}

//短路
//C语言的逻辑运算符有一个特点，它总是对左侧的表达式求值，在对右边的表达式求值，这个顺序是保证的。如果左边的表达式满足逻辑运算符的条件，就不在对右边的表达式求值，这种情况称为短路。
//#include<stdio.h>
//int main()
//{
//	int i = 0, a = 0, b = 2, c = 3, d = 4;
//	i = (a++ && ++b && d++);
//	printf("a=%d\nb=%d\nc=%d\nd=%d\n", a, b, c, d);
//	printf("i=%d\n", i);
//	return 0;
//}
//
//#include<stdio.h>
//int main()
//{
//	int i = 0, a = 1, b = 2, c = 3, d = 4;
//	i = (a++ || ++b || d++);
//	printf("a=%d\nb=%d\nc=%d\nd=%d\n", a, b, c, d);
//	printf("i=%d\n", i);
//	return 0;
//}
//在C语言中，0表示假，非0表示真。


//switch语句
//除if语句外，C语言还提供了switch语句来实现分支结构
//switch语句是一种特殊形式的if···else结构，用于判断条件有多个结果的情况。它把多重的else if改成更易用可读性更好的形式
// 代码块
// switch(expression)
// {
// case value1:statement
// case value2;statement
// ```
// default:statement
// }
//上⾯代码中，根据表达式 expression 不同的值，执⾏相应的 case 分⽀。如果找不到对应的值， 就执⾏ default 分⽀。
// 注：• switch 后的 expression 必须是整型表达式(表示的结果必须是整形，字符类型也算是整形家族)
// • case 后的值，必须是整形常量表达式（整形&&常量）

//if 与 switch 的对比
//#include<stdio.h>
//int main()
//{
//	int n = 0;
//	scanf("%d",&n);
//	if (n % 3 == 1)
//	    printf("余数是1\n");
//	else if(n%3==2)
//		printf("余数是2\n");
//	else
//		printf("余数是0\n");
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	switch (n % 3)
//	{
//	case 0:
//		printf("余数是0\n");
//		break;//跳出
//	case 1:
//		printf("余数是1\n");
//		break;
//	case 2:
//		printf("余数是2\n");
//		break;
//	}
//	//上述的代码中，我们要注意的点有： 1. case 和后边的数字之间必须有空格 
//	// 2. 每⼀个 case 语句中的代码执⾏完成后，需要加上 break ，才能跳出这个 switch 语句。
//
//	return 0;
//}

//输⼊⼀个1~7的数字，打印对应的星期⼏
// 例如：
// 输⼊：1 输出：星期⼀ 
// 输⼊：2 输出：星期⼆ 输⼊：
// 3 输出：星期三 输⼊：
// 4 输出：星期四 输⼊：
// 5 输出：星期五 输⼊：
// 6 输出：星期六 输⼊：
// 7 输出：星期天

//#include<stdio.h>
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	switch (n)
//	{
//	case 1:
//		printf("星期一\n");
//		break;
//	case 2:
//		printf("星期二\n");
//		break;
//	case 3:
//		printf("星期三\n");
//		break;
//	case 4:
//		printf("星期四\n");
//		break;
//	case 5:
//		printf("星期五\n");
//		break;
//	case 6:
//		printf("星期六\n");
//		break;
//	case 7:
//		printf("星期天\n");
//		break;
//	}
//	return 0;
//}

//练习：
//输入1-5，输出的是“工作日”
//输入6-7，输出的是“休息日”

//#include<stdio.h>
//int main()
//{
//	int day = 0;
//	scanf("%d", &day);
//	switch (day)
//	{
//	case 1:
//	case 2:
//	case 3:
//	case 4:
//	case 5:
//		printf("工作日\n");
//		break;
//	case 6:
//	case 7:
//		printf("休息日\n");
//		break;
//	default:
//		printf("输入数字有误，请输入1-7的数字\n");
//	}
//	return 0;
//}
//case语句后面是否加break取决于逻辑关系
//在使⽤ switch 语句的时候，我们经常可能遇到⼀种情况
// ⽐如 switch 后的表达式中的值⽆法匹 配代码中的 case 语句的时候
// 这时候要不就不做处理，要不就得在 switch 语句中加⼊ default ⼦句。
//switch 后边的 expression 的结果不是 value1 ，也不是 value2 的时候，就会执⾏ default ⼦句
//在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗？ default 只能放在最后吗？
//其实，在 switch 语句中 case 语句和 default 语句是没有顺序要求的.
// 只要你的顺序是满⾜实 际需求的就可以.
// 不过我们通常是把 default ⼦句放在最后处理的。

//while循环 C语⾔提供了3种循环语句， while 就是其中⼀种，
// 接下来就介绍⼀下 while 语句。 while 语句的语法结构和 if 语句⾮常相似。
//if和while的对比
//if(表达式) 
// 语句; 
// while(表达式)
// 语句;
///如果循环体想包含更多的语句，可以加上⼤括号


//while 循环的实践 
// 练习：在屏幕上打印 1~10 的值
//#include <stdio.h> 
//int main() 
//{ int i = 1;
//while(i <= 10) 
//{ printf("%d ", i);
//i = i + 1;
//}
//return 0;
//}

//输⼊⼀个正的整数，逆序打印这个整数的每⼀位 
// 例如： 输⼊：1234，输出：4 3 2 1 
// 输⼊：521，输出：1 2 5
//#include<stdio.h>
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	while (n)
//	{
//		printf("%d\n", n % 10);
//		n/=10;
//	}
//	return 0;
//}

//for循环 
// 语法形式 for 
// 循环是三种循环中使⽤最多的
// ， for 循环的语法形式如下： 
// for(表达式1; 表达式2; 表达式3) 
// 语句;
// //如果循环体想包含更多的语句，可以加上⼤括号
//表达式1 ⽤于循环变量的初始化(只被执行一次）
//表达式2 ⽤于循环结束条件的判断 
//表达式3 ⽤于循环变量的调整
//⾸先执⾏ 表达式1 初始化循环变量，接下来就是执⾏ 表达式2 的判断部分，
// 表达式2 的结果如果 ==0，则循环结束； 
// 表达式2 的结果如果!=0则执⾏循环语句，循环语句执⾏完后，再去执⾏表 达式
//3, 调整循环变量，然后再去 表达式2 的地⽅执⾏判断， 表达式2 的结果是否为0，决定循环是否继 续。
// 整个循环的过程中，表达式1初始化部分只被执⾏1次，
// 剩下的就是表达式2、循环语句、表达式3在循 环。

//练习1： 
// 计算1~100之间3的倍数的数字之和
//#include<stdio.h>
//int main()
//{
//	int a = 0;
//	int sum = 0;
//	for (a = 3; a <= 100; a += 3)
//		sum +=a;
//	printf("%d", sum);
//	return 0;
//}
/*#include <stdio.h>
int main()
{ int i = 0;
int sum = 0;
for(i = 1; i <= 100; i++) 
{ if(i % 3 == 0) sum += i; }
printf("%d\n", sum); 
return 0; 
}*///⼩ 的优化 //如果能直接产⽣3的倍数的数字就省去了多余的循环和判断

//do-while 循环
// 语法形式 
// 在循环语句中 do while 语句的使⽤最少，它的语法如下：
// do 
// 语句;
// while(表达式);
//至少执行一次


//练习：打印1-10的数字
//#include <stdio.h> 
//int main()
//{
//	int i = 1;
//	do
//	{
//		printf("%d ", i);
//		i = i + 1;
//	} while (i <= 10);
//	return 0;
//}
//练习：输入一个数字，判断它是几位数。
#include<stdio.h>
int main()
{
	int a = 0;
	int count = 0;
	scanf("%d", &a);
	do
	{
		count++;
		a/=10;
	} while (a != 0);
		printf("%d", count);
	return 0;
}